<?php
	final class WsToTxt extends MyDebuger {
		private $file			= False;
		private $txt			= '';
		private $converted	= '';
		
		public function __construct($file) {
			try {
				/* habilitamos la salida de mensajes */
				$this->enableHtmlDebug();
				$this->enableDemoTime(True);
				/* almacenamos el nombre del archivo */
				$this->file = $file;
				/* realizamos algunas verificaciones */
				$this->verificaciones();
				/* reemplazamos algunos caracteres */
				$this->reemplazos();
				/* convertimos el arhivo */
				$this->conversion();
				/* creamos el nuevo archivo */
				$this->creacionNuevo();
			} catch (MyException $e) {
				$this->show($e->getMensaje($this->html));
			}
		}
		
		public static function convertir($file = False) {
			/* creamos un objeto */
			$temp = new WsToTxt($file);
		}
		
		private function verificaciones() {
			/* verificamos si se asigno el nombre del archivo */
			if ($this->file === False)
				$this->newException('Por favor, asigne el nombre del archivo');
				
			/* verificamos si el archivo existe */
			if (!file_exists($this->file))
				$this->newException('El archivo no existe');
				
			/* verificamos si se puede leer */
			if (!is_readable($this->file))
				$this->newException('El archivo no se puede leer');
		}
		
		private function reemplazos() {
			/* cargamos el archivo al atributo */
			$this->txt = file_get_contents($this->file);
			/* remplazamos los tipos de salto de linea a uno solo */
			$this->txt = str_replace("[\n\r]", "\n", $this->txt);
			$this->txt = str_replace("\n", '|br|', $this->txt);
			
			/* remplazamos las vocales con acento */
			$this->txt = str_replace(chr(27).chr(160), chr(225), $this->txt);	// a
			$this->txt = str_replace(chr(27).chr(130), chr(233), $this->txt);	// e
			$this->txt = str_replace(chr(27).chr(161), chr(237), $this->txt);	// i
			$this->txt = str_replace(chr(27).chr(162), chr(243), $this->txt);	// o
			$this->txt = str_replace(chr(27).chr(163), chr(250), $this->txt);	// u
			
			$this->txt = str_replace(chr(160), chr(225), $this->txt);	// a
			$this->txt = str_replace(chr(130), chr(233), $this->txt);	// e
			$this->txt = str_replace(chr(161), chr(237), $this->txt);	// i
			$this->txt = str_replace(chr(162), chr(243), $this->txt);	// o
			$this->txt = str_replace(chr(163), chr(250), $this->txt);	// u
			
			/* reemplazamos las enies */
			$this->txt = str_replace(chr(27).chr(164), chr(241), $this->txt);	// n
			$this->txt = str_replace(chr(27).chr(165), chr(209), $this->txt);	// N
			$this->txt = str_replace(chr(164), chr(241), $this->txt);	// n
			$this->txt = str_replace(chr(165), chr(209), $this->txt);	// N
			/* eliminamos todos los caracteres de control */
			for ($i = 0; $i < 32; $i++) {
				if ($i != 10)
					$this->txt = str_replace(chr($i), '', $this->txt);
			}
			/* reemplazamos unos caracteres raros */
			$this->txt = str_replace(chr(104).chr(172).chr(38), '', $this->txt);
			$this->txt = str_replace(chr(132), '', $this->txt);
			$this->txt = str_replace(chr(138), '', $this->txt);
			$this->txt = str_replace(chr(140), '', $this->txt);
			$this->txt = str_replace(chr(141), '', $this->txt);
			$this->txt = str_replace(chr(143), '', $this->txt);
			$this->txt = str_replace(chr(148), '', $this->txt);
			$this->txt = str_replace(chr(160), '', $this->txt);
			$this->txt = str_replace(chr(167), '', $this->txt);
			$this->txt = str_replace(chr(239), '', $this->txt);
			/* reemplazamos los espacios */
			$this->txt = str_replace(chr(32), '|sp|', $this->txt);	// espacio
		}
		
		private function conversion() {
			/* recorremos por linea */
			foreach (explode('|br|', $this->txt) AS $linea) {
				/* recorremos por letra */
				foreach (str_split($linea) AS $letra) {
					/* agregamos la letra */
					$this->converted .= $letra;
				}
				/* agregamos el salto de linea */
				$this->converted .= "\r\n";
			}
			/* renovamos los espacios */
			$this->converted = str_replace('|sp|', ' ', $this->converted);
		}
		
		private function creacionNuevo() {
			/* abrimos un archivo para escribir */
			$newFile = fopen($this->file . '.txt', 'w');
			/* agregamos la cadena convertida */
			fwrite($newFile, $this->converted);
			/* cerramos el archivo */
			fclose($newFile);
			/* aplicamos permisos al archivo */
			chmod($this->file . '.txt', 0777);
		}
	}
?>